/**
 * 图片代理工具函数
 * 用于解决图片跨域问题
 */

/**
 * 清理图片URL，移除查询参数
 * @param {string} url - 原始URL
 * @returns {string} 清理后的URL
 */
function cleanImageUrl(url: string): string {
  try {
    const urlObj = new URL(url);
    // 移除所有查询参数，只保留基础URL
    return `${urlObj.protocol}//${urlObj.host}${urlObj.pathname}`;
  } catch (error) {
    // 如果URL解析失败，尝试简单的字符串处理
    const questionMarkIndex = url.indexOf('?');
    return questionMarkIndex !== -1 ? url.substring(0, questionMarkIndex) : url;
  }
}

/**
 * 获取代理图片URL
 * @param {string} originalUrl - 原始图片URL
 * @returns {string} 代理后的图片URL
 */
export function getProxyImageUrl(originalUrl: string): string {
  if (!originalUrl || originalUrl.startsWith('data:') || originalUrl.startsWith('/api/image-proxy') || originalUrl.startsWith('http://localhost')) {
    return originalUrl;
  }
  
  try {
    // 清理URL，移除查询参数
    const cleanedUrl = cleanImageUrl(originalUrl);
    
    // 验证清理后的URL格式
    new URL(cleanedUrl);
    
    // 使用完整的本地代理URL，避免浏览器将相对路径转换为当前域名的绝对路径
    const currentPort = window.location.port || (window.location.protocol === 'https:' ? '443' : '80');
    return `http://localhost:${currentPort}/api/image-proxy?url=${encodeURIComponent(cleanedUrl)}`;
  } catch (error) {
    console.warn('无效的图片URL:', originalUrl);
    return originalUrl;
  }
}

/**
 * 处理HTML内容中的图片URL
 * @param {string} htmlContent - HTML内容
 * @returns {string} 处理后的HTML内容
 */
export function processImagesInHtml(htmlContent: string): string {
  if (!htmlContent) return htmlContent;
  
  return htmlContent.replace(
    /<img([^>]*?)(?:src=["']([^"']*)["'])?([^>]*?)(?:data-original=["']([^"']+)["'])?([^>]*?)>/gi,
    (match, before, src, middle, dataOriginal, after) => {
      // 优先使用 data-original 中的高质量图片URL
      const imageUrl = dataOriginal || src || '';
      
      if (!imageUrl) {
        return match; // 如果没有找到图片URL，返回原始内容
      }
      
      const proxyUrl = getProxyImageUrl(imageUrl);
      
      // 重新构建img标签，移除data-original属性（因为已经使用了）
      const cleanedAttributes = `${before}${middle}${after}`
        .replace(/data-original=["'][^"']*["']/gi, '')
        .replace(/\s+/g, ' ')
        .trim();
      
      return `<img ${cleanedAttributes} src="${proxyUrl}">`;
    }
  );
}

/**
 * 创建图片元素并处理加载错误
 * @param {string} src - 图片源URL
 * @param {string} alt - 图片alt属性
 * @param {string} className - CSS类名
 * @returns {HTMLImageElement} 图片元素
 */
export function createProxyImage(src: string, alt: string = '', className: string = ''): HTMLImageElement {
  const img = document.createElement('img');
  img.src = getProxyImageUrl(src);
  img.alt = alt;
  img.className = className;
  
  // 添加错误处理
  img.onerror = () => {
    console.warn('图片加载失败:', src);
    // 可以设置一个默认的占位图片
    img.src = '';
  };
  
  return img;
}